今天我們來研究 Booleans(布林值)。
Python 內建有 bool class 表達布林值,這個 class 是從 int class 繼承而來:
issubclass(bool, int)
True
True and False 是兩個內建的常數,它們也是 singleton instances,意思是永遠唯一的物件。
True 值是1, False 值是2:
type(True), id(True), int(True)
(bool, 4375128864, 1)
type(False), id(False), int(False)
(bool, 4375128232, 0)
因為 bool class 繼承自 int class,True 和 False 也是 int 的物件:
isinstance(True, bool)
True
isinstance(True, int)
True
既然 True 和 False 是 singletons, 我們可以應用比對值是否相等的 == 運算子,也可以用比對 id 是否相等的 is 運算子:
id(True), id(1 < 2)
(4375128864, 4375128864)
id(False), id(1 == 3)
(4375128232, 4375128232)
(1 < 2) is True, (1 < 2) == True
(True, True)
(1 == 2) is False, (1 == 2) == False
(True, True)
任何整數都可以轉成 boolean,除了 0 以外其他整數都是
bool(x) = True
bool(0)
False
bool(1), bool(100), bool(-1)
(True, True, True)
因為 boolean 是 int class 的 subclass,所以對 boolean 用各種四則運算是合法的:
True > False
True
True + 2
3
False // 2
0
True + True + True
3
(True + True + True) % 2
1
-True
-1
100 * False
0
當然不要寫這種奇怪的 code!這邊只是讓我們更清楚,boolean 是 int 的 subclass。
好啦,我們明天見!
參考:Python 3: Deep Dive (Part 1 - Functional)